/**
 * 模块路径修复脚本
 * 用于检查和修复项目中的模块引用路径问题
 */

// 路径映射配置
const PATH_MAPPINGS = {
  // 示例: 'projects/helpers/cloud_helper.js': '../../../../helpers/cloud_helper.js'
  'projects/helpers/cloud_helper.js': '../../../../helpers/cloud_helper.js'
};

// 要检查的模块列表
const MODULES_TO_CHECK = [
  'cloud_helper.js',
  'page_helper.js',
  'data_helper.js',
  'time_helper.js'
];

// 函数: 检查模块引用路径
function checkModulePath(modulePath) {
  // 检查是否有直接映射
  if (PATH_MAPPINGS[modulePath]) {
    return PATH_MAPPINGS[modulePath];
  }
  
  // 检查模块名称是否在需要检查的列表中
  for (const moduleToCheck of MODULES_TO_CHECK) {
    if (modulePath.includes(moduleToCheck)) {
      // 根据模块所在目录结构，返回正确的相对路径
      // 这里需要根据实际项目结构进行配置
      if (modulePath.startsWith('../../../helpers/')) {
        return '../../../../helpers/' + moduleToCheck;
      }
    }
  }
  
  // 没有找到映射，返回原始路径
  return modulePath;
}

// 函数: 修复模块引用路径
function fixModulePath(filePath, content) {
  // 查找所有require语句
  const requireRegex = /require\(['"](.*?)['"]\)/g;
  let match;
  let fixedContent = content;
  let changes = [];
  
  while ((match = requireRegex.exec(content)) !== null) {
    const originalPath = match[1];
    const fixedPath = checkModulePath(originalPath);
    
    if (originalPath !== fixedPath) {
      fixedContent = fixedContent.replace(
        `require('${originalPath}')`,
        `require('${fixedPath}')`
      );
      fixedContent = fixedContent.replace(
        `require("${originalPath}")`,
        `require("${fixedPath}")`
      );
      
      changes.push({
        file: filePath,
        from: originalPath,
        to: fixedPath
      });
    }
  }
  
  return {
    content: fixedContent,
    changes: changes
  };
}

// 如果此脚本在Node.js环境中运行
if (typeof module !== 'undefined' && module.exports) {
  // 导出函数供其他脚本使用
  module.exports = {
    checkModulePath,
    fixModulePath
  };
  
  // 如果是直接运行此脚本
  if (require.main === module) {
    const fs = require('fs');
    const path = require('path');
    
    // 从命令行参数获取要修复的文件
    const fileToFix = process.argv[2];
    
    if (!fileToFix) {
      console.error('请指定要修复的文件路径');
      process.exit(1);
    }
    
    // 读取文件内容
    fs.readFile(fileToFix, 'utf8', (err, data) => {
      if (err) {
        console.error(`读取文件失败: ${err.message}`);
        process.exit(1);
      }
      
      // 修复路径
      const { content, changes } = fixModulePath(fileToFix, data);
      
      // 如果有变化，写回文件
      if (changes.length > 0) {
        fs.writeFile(fileToFix, content, 'utf8', (writeErr) => {
          if (writeErr) {
            console.error(`写入文件失败: ${writeErr.message}`);
            process.exit(1);
          }
          
          console.log(`已修复文件 ${fileToFix}:`);
          changes.forEach(change => {
            console.log(`  ${change.from} -> ${change.to}`);
          });
        });
      } else {
        console.log(`文件 ${fileToFix} 没有需要修复的路径`);
      }
    });
  }
} 